package com.qiaoba.module.generator.service;

import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.PageResult;
import com.qiaoba.module.generator.entity.GeneratorTable;
import com.qiaoba.module.generator.entity.dto.TableDto;
import com.qiaoba.module.generator.entity.vo.DbTableVo;

import java.util.List;
import java.util.Map;

/**
 * 数据库表 服务层
 *
 * @author ailanyin
 * @version 1.0
 * @since 2023/6/26 9:24
 */
public interface GeneratorTableService {

    /**
     * 查询代码生成列表
     *
     * @param dto       查询条件
     * @param pageQuery 分页
     * @return list
     */
    PageResult<GeneratorTable> selectPageList(TableDto dto, PageQuery pageQuery);

    /**
     * 查询代码生成详细
     *
     * @param tableId tableId
     * @return info
     */
    GeneratorTable selectById(String tableId);

    /**
     * 更新代码生成
     *
     * @param generatorTable generatorTable
     * @return 结果
     */
    int updateById(GeneratorTable generatorTable);

    /**
     * 查询数据库表
     *
     * @param dto 查询条件
     * @return 数据库表集合
     */
    List<DbTableVo> selectDbTableList(TableDto dto);

    /**
     * 通过表名查询代码生成
     *
     * @param tableId   表ID
     * @param allowNull 允许空
     * @return GeneratorTable
     */
    GeneratorTable selectByTableId(String tableId, boolean allowNull);

    /**
     * 导入表结构
     *
     * @param tables 导入的表名 逗号拼接
     */
    void importTable(String tables);

    /**
     * 下载
     *
     * @param tableId      表ID
     * @param templateType 模板类型(前端/后端/sql/全部)
     * @return 文件字节
     */
    byte[] downloadCode(String tableId, String templateType);

    /**
     * 预览代码
     *
     * @param tableId      tableId
     * @param templateType 模板类型(前端/后端/sql/全部)
     * @return 结果
     */
    Map<String, String> previewCode(String tableId, String templateType);

    /**
     * 批量删除代码生成
     *
     * @param tableIds tableIds
     * @return 结果
     */
    int deleteByIds(List<String> tableIds);

    /**
     * 同步表结构
     *
     * @param tableId 表ID
     */
    void syncTable(String tableId);

}
